package com.mes.common.util;

import java.util.concurrent.*;

/**
 * @Author 张喆
 * @Company
 * @Description 线程连接池工具类
 * @Time 2024/10/14 18:23
 */

public class ThreadPoolUtil {
    // 缓存所有的线程池
    private static ConcurrentHashMap<String, ExecutorService>
            threadPools = new ConcurrentHashMap<>();
    // 提供一个根据名字获取线程池的方法
    public static ExecutorService getThreadPool(String name){
        // 判断这个名字的线程池是否存在
        if(threadPools.containsKey(name)){
            return threadPools.get(name);// 如果存在就直接返回
        }
        // 如果线程池不存在，就创建一个线程池返回
        // 我们这里就创建一个固定类型的线程池
        ExecutorService executorService =
                new ThreadPoolExecutor(
                        5,15,1, TimeUnit.MINUTES,
                        new ArrayBlockingQueue<>(10),
                        Executors.defaultThreadFactory(),
                        new ThreadPoolExecutor.AbortPolicy()
                );
        // 将这个线程池缓存在map中
        threadPools.put(name,executorService);
        return executorService;
    }
}
